package pe.gob.servir.apps.censodirectivo.ejb.service;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.log4j.Logger;
import org.jboss.ejb3.annotation.Clustered;

import pe.gob.servir.apps.censodirectivo.common.constantes.Constantes;
import pe.gob.servir.apps.censodirectivo.ejb.dao.ConsumirProcedimientoDAOLocal;
import pe.gob.servir.apps.censodirectivo.ejb.dao.PerfilDAOLocal;
import pe.gob.servir.apps.censodirectivo.excepcion.DAOExcepcion;
import pe.gob.servir.apps.censodirectivo.excepcion.ServiceExcepcion;
import pe.gob.servir.apps.censodirectivo.model.bean.MensajeRespuesta;
import pe.gob.servir.apps.censodirectivo.model.bean.OpcionPerfil;
import pe.gob.servir.apps.censodirectivo.model.bean.Perfil;
/**
 * Session Bean implementation class PerfilService
 */
@Stateless
@Clustered
public class PerfilService implements PerfilServiceRemote, PerfilServiceLocal {
	
	@EJB
	private PerfilDAOLocal perfilDAOLocal;
	
	@EJB
	private ConsumirProcedimientoDAOLocal consumirProcedimientoDAOLocal;
	
	private static final Logger log = Logger.getLogger(UsuarioService.class);
	
    /**
     * Default constructor. 
     */
    public PerfilService() {
        // TODO Auto-generated constructor stub
    }

    public List<Perfil> listarTodos() throws ServiceExcepcion {
    	List<Perfil> listaPerfiles = null;
		try {
			listaPerfiles =  perfilDAOLocal.obtenerTodos();
		} catch (DAOExcepcion e) {
			throw new ServiceExcepcion(e.getCodigoError(), e.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return listaPerfiles;
    }

	@Override
	public MensajeRespuesta registrarPerfil(Perfil perfil) throws ServiceExcepcion {
		log.info("EJB PerfilService - registrarPerfil");
		MensajeRespuesta mensajeRespuesta = null;
		try {
			mensajeRespuesta = perfilDAOLocal.registrarPerfil(perfil);
		} catch(DAOExcepcion dEx) {
			//log.error("ERROR: DAOExcepcion " , dEx);
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return mensajeRespuesta;
	}
	
	@Override
	public MensajeRespuesta obtenerPerfilDescripcion(long perfilId, String descripcionPerfil) throws ServiceExcepcion {
		log.info("EJB PerfilService - obtenerPerfilDescripcion");
		MensajeRespuesta mensajeRespuesta = null;
		try {
			mensajeRespuesta = perfilDAOLocal.obtenerPerfilDescripcion(perfilId, descripcionPerfil);
		} catch(DAOExcepcion dEx) {
			//log.error("ERROR: DAOExcepcion " , dEx);
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return mensajeRespuesta;
	}

	@Override
	public List<OpcionPerfil> obtenerOpcionesPerfil(Perfil perfil) throws ServiceExcepcion {

		log.info("EJB UsuarioService - obtenerOpcionesPerfil");
		List<OpcionPerfil> listaOpcionPerfil = new ArrayList<OpcionPerfil>();
		MensajeRespuesta mensajeRespuesta = null;
		try {
			listaOpcionPerfil = perfilDAOLocal.obtenerOpcionesPerfil(perfil);
		} catch(DAOExcepcion dEx) {
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return listaOpcionPerfil;
	}

	@Override
	public MensajeRespuesta registrarOpcionPerfil(OpcionPerfil opcionPerfil)
			throws ServiceExcepcion {
		log.info("EJB PerfilService - registrarOpcionPerfil");
		MensajeRespuesta mensajeRespuesta = null;
		try {
			mensajeRespuesta = perfilDAOLocal.registrarOpcionPerfil(opcionPerfil);
		} catch(DAOExcepcion dEx) {
			//log.error("ERROR: DAOExcepcion " , dEx);
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return mensajeRespuesta;
	}

	@Override
	public MensajeRespuesta eliminarOpcionPerfil(OpcionPerfil opcionPerfil)
			throws ServiceExcepcion {
		log.info("EJB PerfilService - eliminarOpcionPerfil");
		MensajeRespuesta mensajeRespuesta = null;
		try {
			mensajeRespuesta = perfilDAOLocal.eliminarOpcionPerfil(opcionPerfil);
		} catch(DAOExcepcion dEx) {
			//log.error("ERROR: DAOExcepcion " , dEx);
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return mensajeRespuesta;
	}
	
	@Override
	public MensajeRespuesta obtenerPerfil(Perfil perfil) throws ServiceExcepcion {
		log.info("EJB PerfilService - registrarPerfil");
		MensajeRespuesta mensajeRespuesta = null;
		try {
			mensajeRespuesta = perfilDAOLocal.obtenerPerfil(perfil);
		} catch(DAOExcepcion dEx) {
			mensajeRespuesta = new MensajeRespuesta(dEx.getCodigoError(), dEx.getMensajeError());
		} catch (Exception e) {
			log.error("ERROR: ServiceExcepcion " , e);
			throw new ServiceExcepcion(Constantes.CODIGO_MSJ_ERROR_NEGOCIO, consumirProcedimientoDAOLocal.consultarMensaje(Constantes.CODIGO_MSJ_ERROR_NEGOCIO));
		}
		return mensajeRespuesta;
	}
}
